package tt.dz.appserver.service.business;

import org.apache.avro.AvroRemoteException;

import com.alibaba.fastjson.JSONObject;

import tt.dz.appserver.entity.vo.user.UserHeadImageVo;

/**
 * 用户业务
 * 
 * @author 谢龙飞
 *
 */
public interface UserInfoService {

	/**
	 * 用户注册
	 * 
	 * @param mobileNo
	 *            手机号码
	 * @param password
	 *            密码
	 * @param latitude
	 *            纬度
	 * @param longitude
	 *            经度
	 * @param addrdetail
	 *            用户地址详细
	 * @param areaCode
	 *            区号
	 * @return
	 */
	public JSONObject register(String mobileNo, String password, String latitude, String longitude, String addrdetail,
			String areaCode) throws AvroRemoteException;
	
	/**
	 * 
	 * @param mobileNo 手机号码
	 * @param systemCode 渠道
	 * @param merchantCode 用户编码
	 * @param password   密码
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject register(String mobileNo, String systemCode, String merchantCode, String password) 
			throws AvroRemoteException;
	
	/**
	 * 用户登录
	 * @param phone
	 * @param password
	 * @return
	 */
	public JSONObject userLogin(String baseUrl, String phone, String password, String jpushRegId,String source,String merchantCode);

	/**
	 * 用户快捷登录
	 * 
	 * @param phone
	 * @param verifyCode
	 * @param latitude
	 * @param longitude
	 * @param terminalType
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject fastLogin(String phone, String verifyCode, String latitude, String longitude, String terminalType, String jpushRegId)
			throws AvroRemoteException;

	/**
	 * 用户密码修改
	 * 
	 * @param userId
	 * @param oldPassword
	 * @param newPassword
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject updatePassword(String userId, String oldPassword, String newPassword) throws AvroRemoteException;

	/**
	 * 重置密码，找回密码
	 * 
	 * @param phone
	 * @param password
	 * @param verifyCode
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject resetPassword(String phone, String password, String verifyCode) throws AvroRemoteException;

	/**
	 * 用户是否存在
	 * 
	 * @param phone
	 * @return
	 */
	public JSONObject userExists(String phone) throws AvroRemoteException;

	/**
	 * 修改用户信息
	 * @param userId
	 * @param nickName
	 * @param gender
	 * @param addrDetail
	 * @param longitude
	 * @param latitude
	 * @param email
	 * @return
	 */
	public JSONObject updateUserInfo(String userId, String headPath, String nickName, Integer gender, String addrDetail, Float longitude,
			Float latitude, String email, String signature,String areaCode,String carTypeId) throws AvroRemoteException ;

	/**
	 * 
	 * @param userId
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject getUserInfoDetail(String userId) throws AvroRemoteException ;
	
	
	/**
	 * 查询用户卡号，通过userId
	 * @param userId
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject getUserCardByUserId(String userId) throws AvroRemoteException ;
	
	/**
	 * 获取用户余额信息
	 * @param cardNo
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject getUserWallet(String cardNo) throws AvroRemoteException;
	
	/**
	 * 用户token更新
	 * @param token
	 * @param regId
	 * @return
	 */
	public JSONObject checkOutToken(String token, String jpushRegId);
	
	/**
	 * 获取用户ID，通过userCard
	 * @param userCard
	 * @return
	 */
	public String getUserIdByUserCard(String userCard) throws AvroRemoteException;
	
	/**
	 * 自动登录
	 * @param source 系统编码 数据来源
	 * @param merchantCode 运营商编码
	 * @param account  第三方平台唯一帐号
	 * @param jPushRegId 第三方平台唯一标识
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject autoLogin(String source, String merchantCode, String account, String jPushRegId)throws AvroRemoteException;
	
	/**
	 * 
	 * 解绑用户
	 * @param source 系统编码 数据来源
	 * @param merchantCode 运营商编码
	 * @param account  第三方平台唯一帐号
	 * @param jPushRegId 第三方平台唯一标识
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject unlockUser(String source, String merchantCode, String account, String jPushRegId,String bindType)throws AvroRemoteException;
	
	/**
	 * 
	 * @param openid  //用户在微信上对应公众号唯一标识
	 * @param access_token 调用微信接口凭证
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject getWeixinDetail(String openid,String access_token)throws AvroRemoteException;
	
	/**
	 * 第三方登录完成后首次设置密码
	 * @param phone 手机获取
	 * @param password 新密码
	 * @param type  重置方式 0:直接重置,（当前定值 0）1:通过验证码重置,2:带有原始密码重置
	 * @param merchantCode 所属运营商编码，不传默认电桩
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject setPassword(String phone, String password, String type, String merchantCode,String userId)throws AvroRemoteException;

	/**
	 * 获取绑定关系列表
	 * @param phone   用户的手机号或者userid
	 * @param bindType  绑定类别:1:微信，2:QQ，3:新浪微博，4:腾讯微博，默认全部
	 * @param source  渠道;不传渠道值默认app;
	 * @param merchantCode  运营商码，默认电桩
	 * @return
	 */
	public JSONObject bindShipList(String phone, String bindType, String source, String merchantCode)throws AvroRemoteException;

	/**
	 * 绑定手机号
	 * @param phone 手机号
	 * @param verifyCode 验证码
	 * @param source  系统码
	 * @param merchantCode 运营商码
	 * @param account  第三方openid
	 * @param bindingType 绑定方式
	 * @param nickname 昵称
	 * @param sex 性别 
	 * @param addrDetail 地址
	 * @param userImage 头像
	 * @return
	 */
	public JSONObject bindingUser(String phone, String verifyCode, String source, String merchantCode, String account,
			String bindingType, String nickname, String sex, String addrDetail, String headPath)throws AvroRemoteException;
	
	/**
	 * 登录后绑定
	 * @param phone 手机号
	 * @param userId userid
	 * @param account 第三方帐号
	 * @param bindingType 绑定方式
	 * @param source 渠道
	 * @param merchantCode 系统码
	 * @return
	 * @throws AvroRemoteException
	 */
	public JSONObject loginBindingUser(String phone, String userId, String account, String bindingType,String source,String merchantCode)throws AvroRemoteException;
}



